package basis.ea;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;


/**
 * Diese Klasse dient dazu ein Objekt in verschiedenen Formaten 
 * (CSV, TSV) zu importieren. Diese werden als Datensatzliste zur 
 * weiteren Verarbeitung zur Verfuegung gestellt.
 * 
 * Datei: Importdatei.java                   
 * Datum: 10.12.2011   
 *                  
 * @author Alexander Bredo 
 * @version 0.2
 */
public class Importdatei
{
  private ArrayList<Datensatz> datensatzListe = 
      new ArrayList<Datensatz> ();
  private ArrayList<String> feldnamenListe = 
      new ArrayList<String> ();
  private String trennzeichen = ";";
  
  /**
   * Liest eine Datei ein und stellt den Zugriff bereit
   */
  public Importdatei (String dateipfad, Importformate format) 
      throws FileNotFoundException
  {
    File datei = new File (dateipfad);
    Scanner scanner = new Scanner (datei); 
    
    feldnamenParsen (scanner.nextLine());
    while (scanner.hasNextLine()) 
    {
      datensatzListe.add (datenfelderParsen (scanner.nextLine()));
    }
    initTrennzeichen (format);          /* Trennzeichen setzen          */
  }
  
  
  /**
   * Setzte das Trennzeichen enstprechend dem Importformat
   */
  private void initTrennzeichen (Importformate format)
  {
    switch (format)
    {
    case CSV:
      trennzeichen = ";";
      break;
    case TSV:
      trennzeichen = "\t";
      break;
    default:
      trennzeichen = ";";
    }
  }
  
  
  /**
   * Liest die Feldnamen aus einer Zeile aus und speichert sie
   */
  private void feldnamenParsen (String zeile)
  {
    Scanner scanner = new Scanner (zeile).useDelimiter (trennzeichen); 
    while (scanner.hasNext()) 
    {
      feldnamenListe.add (scanner.next());
    }
  }
  
  
  /**
   * Liest die Feldwerte aus einer Zeile aus und speichert sie
   */
  private Datensatz datenfelderParsen (String zeile)
  {
    int i = 0;
    Datensatz ds = new Datensatz ();
    Scanner scanner = new Scanner (zeile).useDelimiter (trennzeichen); 
    
    while (scanner.hasNext()) 
    {
      ds.datenfeldHinzufuegen (feldnamenListe.get (i), 
          new Datenfeld (scanner.next ()));
    }
    return ds;
  }
  
  
  /**
   * Gibt die Datensatz-Liste der importierten Datei zurueck
   */
  public ArrayList<Datensatz> gibDatensatzListe ()
  {
    return datensatzListe;
  }
}
